home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Apple Script / OSAX / Mount Volume / ZoneList.c < prev    next >
Text File  |  1993-10-29  |  3KB  |  130 lines

  1. #ifndef __APPLETALK__
  2. #include <Appletalk.h>
  3. #endif
  4.  
  5. #ifndef __ERRORS__
  6. #include <Errors.h>
  7. #endif
  8.  
  9. #ifndef __APPLEEVENTS__
  10. #include <AppleEvents.h>
  11. #endif
  12.  
  13. #ifndef __PLSTRINGFUNCS__
  14. #include <PLStringFuncs.h>
  15. #endif
  16.  
  17. #ifndef __MEMORY__
  18. #include <Memory.h>
  19. #endif
  20.  
  21. #ifndef __STRING__
  22. #include <String.h>
  23. #endif
  24.  
  25. void SetReturnValue(AppleEvent *result, Ptr theText);
  26. void SetErrorValue(AppleEvent *result, Ptr theText, OSErr error);
  27. void ParseBuffer(char *stuff, AEDescList theList, short);
  28. OSErr Get1Parameter(AppleEvent *in, OSType type, short size, StringPtr theString);
  29. pascal OSErr GetObjectList(AppleEvent *in, AppleEvent *out, long);
  30.  
  31. pascal OSErr GetObjectList(AppleEvent *in, AppleEvent *out, long)
  32. {
  33.     MPPParamBlock    pb;
  34.     EntityName        entity;
  35.     char            buffer[4000];
  36.     AEDescList        theList;
  37.     OSErr            error;
  38.     Str32            zoneName;
  39.     Str32            typeName;
  40.     
  41.     error = AECreateList(nil, 0, false, &theList);
  42.     if (error) return error;
  43.     
  44.     error = Get1Parameter(in, 'TYPE', 31, typeName);
  45.     if (error)
  46.     {
  47.         typeName[0] = 1;
  48.         typeName[1] = '=';
  49.         error = noErr;
  50.     }
  51.     error = Get1Parameter(in, 'ZONE', 31, zoneName);
  52.     if (error)
  53.     {
  54.         zoneName[0] = 1;
  55.         zoneName[1] = '*';
  56.         error = noErr;
  57.     }
  58.     
  59.     NBPSetEntity((Ptr)&entity, "\p=", typeName, zoneName);
  60.     pb.NBPinterval = 3;
  61.     pb.NBPcount = 3;
  62.     pb.NBPentityPtr = (Ptr)&entity;
  63.     pb.NBPretBuffSize = 4000;
  64.     pb.NBPretBuffPtr = buffer;
  65.     pb.NBPmaxToGet = 40;
  66.     error = PLookupName((MPPPBPtr) &pb, false);
  67.     if (!error)
  68.     {
  69.         if (pb.NBPnumGotten)
  70.         {
  71.             ParseBuffer(buffer, theList, pb.NBPnumGotten);
  72.         }
  73.         else
  74.         {
  75.             char    c = 0;
  76.             AEPutPtr(&theList, 0, typeChar, &c, 1);
  77.         }
  78.         AEPutParamDesc(out, keyDirectObject, &theList);
  79.     }
  80.     else
  81.     {
  82.         SetErrorValue(out, "Network Error!",error);
  83.     }
  84.     AEDisposeDesc(&theList);
  85.     return error;
  86. }
  87.  
  88. void ParseBuffer(char *stuff, AEDescList theList, short numItems)
  89. {
  90.     OSErr        error;
  91.     EntityName    theEntity;
  92.     AddrBlock    theAddress;
  93.     short        count = numItems;
  94.  
  95.     do 
  96.     {
  97.         error = NBPExtract((Ptr) stuff, numItems, count, &theEntity, &theAddress);
  98.         p2cstr((char *) &theEntity);
  99.         error = AEPutPtr(&theList, 0, typeChar, (char *)&theEntity, strlen((char *)&theEntity));
  100.     } while (--count && !error);
  101. }
  102.  
  103. OSErr Get1Parameter(AppleEvent *in, OSType type, short size, StringPtr theString)
  104. {
  105.     DescType        theType;
  106.     OSErr            error;
  107.     Size            paramSize;
  108.  
  109.     error = AESizeOfParam(in, type, &theType, ¶mSize);
  110.     if (error) goto exit;
  111.     theString[0] = paramSize;
  112.     error = AEGetParamPtr(in, type, typeChar, &theType, (Ptr) &(theString[1]), size, ¶mSize);
  113.     if (error) goto exit;
  114.  
  115. //    c2pstr((char *)theString);
  116.  
  117. exit:
  118.     return error;
  119. }
  120. void SetReturnValue(AppleEvent *result, Ptr theText)
  121. {
  122.     AEPutParamPtr(result, keyDirectObject, typeChar, theText,  strlen(theText));
  123. }
  124.  
  125. void SetErrorValue(AppleEvent *result, Ptr theText, OSErr error)
  126. {
  127.     AEPutParamPtr(result, keyErrorNumber, typeShortInteger, (Ptr) &error, sizeof(short));
  128.     AEPutParamPtr(result, keyErrorString, typeChar, theText, strlen(theText));
  129. }
  130.